/**********************************************************************

  Audacity: A Digital Audio Editor

  ShuttleGetDefinition.h

  Paul Licameli split this out of SettingsVisitor.h

**********************************************************************/

#ifndef __AUDACITY_SHUTTLE_GET_DEFINITION__
#define __AUDACITY_SHUTTLE_GET_DEFINITION__

#include "SettingsVisitor.h" // to inherit
#include "CommandTargets.h" // to inherit

/**************************************************************************//**
\brief SettingsVisitor that retrieves a JSON format definition of a command's parameters.
********************************************************************************/
class AUDACITY_DLL_API ShuttleGetDefinition final : public ConstSettingsVisitor, public CommandMessageTargetDecorator
{
public:
    ShuttleGetDefinition(CommandMessageTarget& target);
    wxString Result;
    bool IsOptional();
    ConstSettingsVisitor& Optional(const bool& var) override;
    void Define(bool var, const wxChar* key, bool vdefault, bool vmin, bool vmax, bool vscl) override;
    void Define(int var, const wxChar* key, int vdefault, int vmin, int vmax, int vscl) override;
    void Define(size_t var, const wxChar* key, int vdefault, int vmin, int vmax, int vscl) override;
    void Define(float var, const wxChar* key, float vdefault, float vmin, float vmax, float vscl) override;
    void Define(double var, const wxChar* key, float vdefault, float vmin, float vmax, float vscl) override;
    void Define(double var, const wxChar* key, double vdefault, double vmin, double vmax, double vscl) override;
    void Define(const wxString& var,  const wxChar* key, wxString vdefault, wxString vmin, wxString vmax, wxString vscl) override;
    void DefineEnum(int var, const wxChar* key, int vdefault, const EnumValueSymbol strings[], size_t nStrings) override;
};

#endif
